home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / music / musicato.zip / SETUP.MS_ / SETUP.MS
Text File  |  1993-01-04  |  33KB  |  992 lines

  1. ' ------------- Copyright (c) Jo Brodtkorb, Musicator 1992-93 ---------------
  2. ' ***************************************************************************
  3. '
  4. ' FILE NAME        : c:\mgw-inst\setup.mst
  5. ' CREATED          : 92.12.15
  6. ' LAST UPDATED     : 93.01.04
  7. ' PURPOSE          : Setupprogram for Musicator GS for Windows
  8. '
  9. '
  10. ' INIT  DATE         LOG (Newest first)
  11. ' ---------------------------------------------------------------------------
  12. ' Sven  93.01.04     Support for a demo verion of Musicator GS 
  13. ' Sven  92.12.15     Initial version created
  14. ' **************************************************************************
  15.  
  16. ' **************************************************************************
  17. ' Denne seksjonen skal redigeres for de forskjellige typer installasjon 
  18. '
  19. ' Neste linje kommenteres ut med '' hvis installasjonen ikke er en demoversjon
  20. ' Når linjen ikke er kommentert ut ser den slik ut: '$DEFINE DEMO
  21. '$DEFINE DEMO
  22. ' **************************************************************************
  23.  
  24. ' Av '$DEFINE DEBUG  ''Define for script development/debugging
  25.  
  26. '-- Includes ---------------------------------------------------------------
  27. '$INCLUDE 'setupapi.inc'
  28. '$INCLUDE 'msdetect.inc'
  29.  
  30. '-- Constants --------------------------------------------------------------
  31. CONST szBadDisks$ = "Setup disks may be corrupted.  Please contact your Dealer."
  32. CONST szKB$       = " K"
  33. CONST szMB$       = " MB"
  34. '$IFDEF DEMO
  35.     CONST szTitle$      = "Musicator GS Demo Setup"
  36.     CONST szGroupName$  = "Musicator GS Demo"
  37.     CONST szProgramName$= "Musicator GS for Windows Demo"
  38.     CONST szDefDir$   = "C:\MGW-DEMO"
  39. '$ELSE
  40.     CONST szTitle$      = "Musicator GS Setup"
  41.     CONST szGroupName$  = "Musicator GS"
  42.     CONST szProgramName$= "Musicator GS for Windows"
  43.     CONST szDefDir$   = "C:\MGW"
  44. '$ENDIF
  45. CONST szInfName$  = "SETUP.INF"
  46. CONST fTRUE%      = 1
  47. CONST fFALSE%     = 0
  48. CONST szON$       = "ON"
  49. CONST szOFF$      = "OFF"
  50. CONST MinTempSpace%     = 3072
  51. CONST EWRestartWin&     = 42
  52. CONST EWRebootSystem&   = 43
  53. CONST MaxNoOfDisks%     = 26
  54.  
  55. ''Dialog ID's (must match those in DIALOGS.H)
  56. CONST WELCOME       = 1100
  57. CONST WELCOMEDEMO   = 1101    ' Demo versjon of Musicator GS
  58. CONST CUSTINST      = 1200
  59. CONST CUSTINSTDEMO  = 1201
  60. CONST ASKQUIT       = 1300
  61. CONST ASKQUITDEMO   = 1301
  62. CONST ASKATM        = 1400
  63. CONST ASKATMDEMO    = 1401
  64. CONST GETPATH       = 1500
  65. CONST GETPATHDEMO   = 1501
  66. CONST BADDIR        = 1600
  67. CONST BADDIRDEMO    = 1601
  68. CONST CREATEPATH    = 1700
  69. CONST CREATEPATHDEMO= 1701
  70. CONST WAITSIZE      = 1800
  71. CONST WAITSIZEDEMO  = 1801
  72. CONST EXITSUCCESS   = 1900
  73. CONST EXITSUCCESSDEMO = 1901
  74. CONST EXITQUIT      = 2000
  75. CONST EXITQUITDEMO  = 2001
  76. CONST HELPINSTALL   = 2100
  77. CONST HELPINSTALLDEMO = 2101
  78. CONST HELPPATH      = 2200
  79. CONST HELPPATHDEMO  = 2201
  80. CONST TOOBIG        = 2300
  81. CONST TOOBIGDEMO    = 2301
  82. CONST EXITFAILURE   = 2400
  83. CONST EXITFAILUREDEMO = 2401
  84. CONST RESTARTWIN    = 2500
  85. CONST RESTARTWINDEMO= 2501
  86. ' CONST BWCCEXISTS  = 2600
  87. ' CONST BWCCNEW     = 2700
  88. ' CONST BWCCOLD     = 2800
  89. ' CONST BWCCHELP    = 2900
  90. CONST CDCONFIRMINFO = 3000
  91. CONST CDGETNAMEORG  = 3100
  92. CONST CDALREADYUSED = 3200
  93. CONST CDBADFILE     = 3300
  94. CONST CDBADNAMEORG  = 3400
  95.  
  96. ''Bitmap ID (must match those in DIALOGS.RC)
  97. '$IFDEF DEMO
  98.    CONST LOGO = 2
  99. '$ELSE
  100.    CONST LOGO = 1
  101. '$ENDIF
  102.  
  103. '-- Globals ----------------------------------------------------------------
  104. GLOBAL  szDir$              ''Destination directory
  105. GLOBAL  szDrive$            ''Destination drive
  106. GLOBAL  szWinDrive$         ''Windows drive
  107. GLOBAL  cbDrive&            ''Space available on destination drive
  108. GLOBAL  cbWinDrive&         ''Space available on Windows drive
  109. GLOBAL  szSrcDir$           ''Source directory
  110. GLOBAL  szWinDir$           ''Windows directory
  111. GLOBAL  fATMFiles%          ''Install ATM or TrueType
  112. GLOBAL  cbMGWFiles&         ''KBytes required for basic GWS
  113. GLOBAL  cbWinFiles&         ''KBytes required for files in Windows directory
  114. GLOBAL  CUIDLL$             ''Dialog/Images DLL
  115. GLOBAL  HELPPROC$           ''Help dialog procedure
  116. GLOBAL  DriveList$          ''List of available drives
  117. GLOBAL  szCDOrganization$   ''Organisation that owns the produkt
  118. GLOBAL  szCDName$           ''Person that owns the produkt
  119.  
  120.  
  121. '-- Declaratin of DLL functions---------------------------------------------
  122. ' DECLARE FUNCTION SetupCryptName LIB "mscuistf.dll" (szInString$, szOutString$) AS INTEGER
  123. DECLARE FUNCTION ExitWindows LIB "user.exe" (dwReturnCode&, iReserved%) AS INTEGER
  124. ' DECLARE FUNCTION ExitWindowsExec LIB "user.exe" (lpszExe$, lpszParams$) AS INTEGER
  125.  
  126. '-- Prototypes -------------------------------------------------------------
  127. DECLARE SUB BadPath
  128. DECLARE SUB CalcPathSpace
  129. DECLARE SUB CheckTempSpace
  130. DECLARE SUB CheckATM
  131. DECLARE FUNCTION CreateInstallPath(szDir$) AS STRING
  132. DECLARE FUNCTION AskForBWCC AS INTEGER
  133. DECLARE SUB DetermineSizes
  134. DECLARE SUB GetDriveList
  135. DECLARE SUB GetInstallPath
  136. DECLARE SUB Install
  137. DECLARE SUB InsufficientSpace
  138. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  139.  
  140.  
  141. '---------------------------------------------------------------------------
  142. ' INIT:  Load globals and read .INF file
  143. '---------------------------------------------------------------------------
  144. INIT:
  145.     SetTitle szTitle$
  146.     CursorSave% = ShowWaitCursor()
  147.     CUIDLL$   = "mscuistf.dll"          ''Custom user interface dll
  148.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  149.  
  150.     SetBitmap CUIDLL$, LOGO
  151.  
  152.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  153.     IF szInf$ = "" THEN
  154.     szInf$ = GetSymbolValue("STF_CWDDIR") + szInfName$
  155.     END IF
  156.     ReadInfFile szInf$
  157.  
  158.     szWinDir$ = GetWindowsDir()
  159.     szWinDrive$ = MID$(szWinDir$, 1, 1)
  160. '$IFDEF DEBUG
  161.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  162.     '' IsDirWriteable does not work propably
  163.     IF IsDriveValid(szWinDrive$) = fFALSE% THEN
  164.     i% = DoMsgBox("Windows drive ('"+szWinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  165.     GOTO QUIT
  166.     END IF
  167. '$ENDIF ''DEBUG
  168.     RestoreCursor CursorSave%
  169.  
  170.  
  171. '---------------------------------------------------------------------------
  172. ' WELCOME:  Display Welcome dialog
  173. '---------------------------------------------------------------------------
  174. WELCOME:
  175. '$IFDEF DEMO
  176. '     sz$ = UIStartDlg(CUIDLL$, WELCOMEDEMO, "FInfoDlgProc", HELPINSTALLDEMO, HELPPROC$)
  177.     sz$ = UIStartDlg(CUIDLL$, WELCOMEDEMO, "FInfoDlgProc", 0, "")
  178. '$ELSE
  179. '     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", HELPINSTALL, HELPPROC$)
  180.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
  181. '$ENDIF
  182.     IF sz$ = "CONTINUE" THEN
  183.     UIPop 1
  184.     ELSE
  185.     GOSUB ASKQUIT
  186.     GOTO WELCOME
  187.     END IF
  188.  
  189. CHECKPROSESSOR:
  190.     IF GetProcessorType() < 3 THEN ' Less than 80386
  191.     i% = DoMsgBox("'" + Ltrim$(Str$(GetProcessorType())) + "' is not a legal machine", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  192.     GOSUB ASKQUIT
  193.     GOTO CHECKDOS
  194.     ENDIF
  195.  
  196. CHECKDOS:
  197. '     IF GetDOSMajorVersion() = 3 THEN
  198. '         IF GetDOSMinorVersion() = 3 THEN
  199. '             GOTO CHECKWINDOWS
  200. '         ENDIF
  201. '     ELSEIF GetDOSMajorVersion() = 4 THEN
  202. '         IF GetDOSMinorVersion() = 1 THEN
  203. '             GOTO CHECKWINDOWS
  204. '         ENDIF
  205. '     ELSEIF GetDOSMajorVersion() > 4 THEN
  206. '         GOTO CHECKWINDOWS
  207. '     ENDIF
  208. '     i% = DoMsgBox(Ltrim$(Str$(GetDOSMajorVersion()))+"."+Ltrim$(Str$(GetDOSMinorVersion()))+ " is not a legal DOS version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  209. '     GOSUB ASKQUIT
  210. '     GOTO CHECKDOS
  211.  
  212. CHECKWINDOWS:
  213.     IF GetWindowsMajorVersion() < 3 THEN
  214.     i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  215.     GOSUB ASKQUIT
  216.     GOTO CHECKWINDOWS
  217.     ELSEIF GetWindowsMajorVersion() = 3 THEN
  218. '         IF GetWindowsMinorVersion() <> 0 THEN
  219.     IF GetWindowsMinorVersion() = 0 THEN
  220. '         ELSEIF GetWindowsMinorVersion() <> 1 THEN
  221.         i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  222.     ENDIF
  223.     ELSEIF GetWindowsMajorVersion() > 3 THEN
  224. '             i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  225.     ENDIF
  226.  
  227. '$IFDEF DEMO   '' Do not ask for name and organization
  228.     GOTO CUSTINST
  229. '$ENDIF
  230. '---------------------------------------------------------------------------
  231. ' GETOWNER: Get name and organization (the owner of the product)
  232. '---------------------------------------------------------------------------
  233. GETOWNER:
  234.     sz$ = UIStartDlg(CUIDLL$, CDGETNAMEORG, "FNameOrgDlgProc", 0, "")
  235.     IF sz$ = "CONTINUE" THEN
  236.     szCDOrganization$ = GetSymbolValue("OrgOut")
  237.     szCDName$         = GetSymbolValue("NameOut")
  238.     UIPop 1
  239.     ELSEIF sz$ = "EXIT" THEN
  240.     GOSUB ASKQUIT
  241.     GOTO GETOWNER
  242.     ELSE
  243.     UIPop 1
  244.     GOTO GETOWNER
  245.     END IF
  246.  
  247. '---------------------------------------------------------------------------
  248. ' EMPTYOWNER: Check if name and organization are empty
  249. '---------------------------------------------------------------------------
  250. EMPTYOWNER:
  251.     IF (szCDOrganization$ = "") AND (szCDName$ = "") THEN
  252.         sz$ = UIStartDlg(CUIDLL$, CDBADNAMEORG, "FInfoDlgProc", 0, "")
  253.         IF sz$ = "CONTINUE" THEN
  254.             UIPop 1
  255.             GOTO GETOWNER
  256.         ELSE
  257.             GOSUB ASKQUIT
  258.             GOTO EMPTYOWNER
  259.         ENDIF
  260.     ENDIF
  261.  
  262. '---------------------------------------------------------------------------
  263. ' CONFIRMOWNER: Confirm name and organization
  264. '---------------------------------------------------------------------------
  265. CONFIRMOWNER:
  266.     ConfirmTextIn$ = "ConfirmTextIn"
  267.     AddListItem ConfirmTextIn$, szCDOrganization$
  268.     AddListItem ConfirmTextIn$, szCDName$
  269.     sz$ = UIStartDlg(CUIDLL$, CDCONFIRMINFO, "FConfirmDlgProc", 0, "")
  270.     RemoveSymbol ConfirmTextIn$
  271.     IF sz$ = "BACK" THEN
  272.         UIPop 1
  273.         GOTO GETOWNER
  274.     ELSEIF sz$ = "CONTINUE" THEN
  275.         UIPop 1
  276.     ELSE
  277.         GOSUB ASKQUIT
  278.         GOTO CONFIRMOWNER
  279.     ENDIF
  280.  
  281. '---------------------------------------------------------------------------
  282. ' CHECKOWNER: Check name and organization
  283. '---------------------------------------------------------------------------
  284. CHECKOWNER:
  285.     szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  286.     ini$ = MakePath (szSrcDir$, "setup.ini")
  287.     szOldOrg$  = GetIniKeyString (ini$, "Names", "MusicatorGSOrganisation")
  288.     szOldName$ = GetIniKeyString (ini$, "Names", "MusicatorGSName")
  289. '$IFDEF DEBUG
  290.     i% = DoMsgBox("Ny Org = " + szCDOrganization$ + ", Nytt Navn = " + szCDName$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  291.     i% = DoMsgBox("Gammel Org = " + szOldOrg$ + ", Gammelt Navn = " + szOldName$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  292. '$ENDIF ''DEBUG
  293.     IF (szOldOrg$ = "") AND (szOldName$ = "") THEN
  294.     ELSE
  295.         IF (Ucase$(szCDOrganization$) <> Ucase$(szOldOrg$)) OR (Ucase$(szCDName$) = Ucase$(szOldName$)) THEN
  296.             sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "")
  297.             IF sz$ = "CONTINUE" THEN
  298.                 UIPop 1
  299.             ELSE
  300.                 GOSUB ASKQUIT
  301.                 GOTO CHECKOWNER
  302.             ENDIF
  303.         ENDIF
  304.     ENDIF
  305.  
  306. '---------------------------------------------------------------------------
  307. ' CUSTINST:  Get users installation selections
  308. '---------------------------------------------------------------------------
  309. CUSTINST:
  310.     CursorSave% = ShowWaitCursor()
  311. '$IFDEF DEMO
  312.     sz$ = UIStartDlg(CUIDLL$, WAITSIZEDEMO, "FModelessDlgProc", 0, "")
  313. '$ELSE
  314.     sz$ = UIStartDlg(CUIDLL$, WAITSIZE, "FModelessDlgProc", 0, "")
  315. '$ENDIF
  316.     szDir$ = szDefDir$
  317.     DRIVETEXT$   = "DriveStatusText"
  318.     FOR i% = 1 to 7 STEP 1
  319.     AddListItem DRIVETEXT$, ""
  320.     NEXT i%
  321.     GetDriveList
  322.     iMaxDiskNo% = GetListLength (DriveList$)
  323.  
  324.     iFound% = fFALSE%
  325.     FOR iDiskNo% = 1 TO iMaxDiskNo% STEP 1
  326.     szDrive$ = MID$(GetListItem (DriveList$, iDiskNo%), 1, 1)
  327.     szDir$ = szDrive$ + MID$(szDir$, 2)
  328.     DetermineSizes
  329.     CalcPathSpace
  330.     IF szWinDrive$ = szDrive$ THEN
  331.         cbTotal& = cbMGWFiles& + cbWinFiles&
  332.     ELSE
  333.         cbTotal& = cbMGWFiles&
  334.     ENDIF
  335.     IF cbTotal& < cbDrive&  THEN
  336.         iFound% = fTRUE%
  337.         EXIT FOR
  338.     ENDIF
  339.     NEXT iDiskNo%
  340.     IF iFound% = fFALSE% THEN
  341.     szDir$ = szDefDir$
  342.     DetermineSizes
  343.     CalcPathSpace
  344.     ENDIF
  345.     UIPop 1     ''WaitSize
  346.     RestoreCursor CursorSave%
  347. ASKI1:
  348.     IF szWinDrive$ = szDrive$ THEN
  349.     cbTotal&    = cbMGWFiles& + cbWinFiles&
  350.     cbWinTotal& = fFALSE%
  351.     ELSE
  352.     cbTotal&    = cbMGWFiles&
  353.     cbWinTotal& = cbWinFiles&
  354.     ENDIF
  355.  
  356.     ReplaceListItem DRIVETEXT$, 1, szDrive$ + ":"
  357.     ReplaceListItem DRIVETEXT$, 2, Ltrim$(Str$(cbTotal&))+szKB
  358.     ReplaceListItem DRIVETEXT$, 3, Ltrim$(Str$(cbDrive&))+szKB
  359.     ReplaceListItem DRIVETEXT$, 7, szDir$
  360.  
  361.     IF szWinDrive$ = szDrive$ THEN
  362.     ReplaceListItem DRIVETEXT$, 4, ""
  363.     ReplaceListItem DRIVETEXT$, 5, ""
  364.     ReplaceListItem DRIVETEXT$, 6, ""
  365.     ELSE
  366.     ReplaceListItem DRIVETEXT$, 4, szWinDrive$ + ":"
  367.     ReplaceListItem DRIVETEXT$, 5, Ltrim$(Str$(cbWinTotal&))+szKB
  368.     ReplaceListItem DRIVETEXT$, 6, Ltrim$(Str$(cbWinDrive&))+szKB
  369.     ENDIF
  370.  
  371. '$IFDEF DEMO
  372.     sz$ = UIStartDlg(CUIDLL$, CUSTINSTDEMO, "FCustInstDlgProc", HELPINSTALLDEMO, HELPPROC$)
  373. '$ELSE
  374.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", HELPINSTALL, HELPPROC$)
  375. '$ENDIF
  376.  
  377.     IF sz$ = "CONTINUE" THEN
  378.     IF cbTotal& > cbDrive& THEN
  379.         InsufficientSpace
  380.         GOTO ASKI1
  381.     END IF
  382.     CheckTempSpace
  383.     CheckATM
  384.     UIPop 1
  385.     ELSEIF sz$ = "PATH" THEN
  386.     GetInstallPath
  387.     GOTO ASKI1
  388.     ELSEIF sz$ = "REACTIVATE" THEN
  389.     GOTO ASKI1
  390.     ELSEIF sz$ = "EXIT" THEN
  391.     GOSUB ASKQUIT
  392.     GOTO ASKI1
  393.     ELSE
  394.     GOTO ASKI1
  395.     END IF
  396.     UIPop 1
  397.  
  398.     Install
  399.  
  400.  
  401.  
  402. '---------------------------------------------------------------------------
  403. ' QUIT:  Exit setup
  404. '---------------------------------------------------------------------------
  405. QUIT:
  406.     ON ERROR GOTO ERRQUIT
  407.  
  408.     IF ERR = 0 THEN
  409. '$IFDEF DEMO
  410.         dlg% = EXITSUCCESSDEMO
  411. '$ELSE
  412.         dlg% = EXITSUCCESS
  413. '$ENDIF
  414.     ELSEIF ERR = STFQUIT THEN
  415. '$IFDEF DEMO
  416.         dlg% = EXITQUITDEMO
  417. '$ELSE
  418.         dlg% = EXITQUIT
  419. '$ENDIF
  420.     ELSE
  421. '$IFDEF DEMO
  422.         dlg% = EXITFAILUREDEMO
  423. '$ELSE
  424.         dlg% = EXITFAILURE
  425. '$ENDIF
  426.     END IF
  427. QUITL1:
  428.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  429.     IF sz$ = "REACTIVATE" THEN
  430.     GOTO QUITL1                    
  431.     END IF
  432.     UIPop 1
  433.  
  434. AGAIN:
  435.     IF ERR = 0 THEN
  436.     'NB! SVBR
  437.     ini$ = MakePath (szSrcDir$, "setup.ini")
  438. '$IFDEF DEBUG
  439. '     i% = DoMsgBox("F¢r crypt - Ny Org = " + szCDOrganization$ + ", Nytt Navn = " + szCDName$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  440. '$ENDIF ''DEBUG
  441. '         i% = SetupCryptName( szCDOrganization$, szCDOrganization$ )
  442. '$IFDEF DEBUG
  443. '     i% = DoMsgBox("Etter crypt - Ny Org = " + szCDOrganization$ + ", Nytt Navn = " + szCDName$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  444. '$ENDIF ''DEBUG
  445.     CreateIniKeyValue ini$, "Names", "MusicatorGSOrganisation", szCDOrganization$, cmoAll
  446.     CreateIniKeyValue ini$, "Names", "MusicatorGSName", szCDName$, cmoAll
  447.  
  448.     IF RestartListEmpty() = fFALSE% THEN
  449. '$IFDEF DEMO
  450.         sz$ = UIStartDlg(CUIDLL$, RESTARTWINDEMO, "FInfoDlgProc", 0, "")
  451. '$ELSE
  452.         sz$ = UIStartDlg(CUIDLL$, RESTARTWIN, "FInfoDlgProc", 0, "")
  453. '$ENDIF
  454.         IF sz$ = "CONTINUE" THEN
  455.            UIPop 1
  456.         ELSEIF sz$ = "BACK" THEN
  457.            UIPop 1
  458.            END
  459.         ELSE
  460.            UIPop 1
  461.            GOTO AGAIN
  462.         END IF
  463.         i% = ExitExecRestart
  464.         IF i% = 0 THEN
  465.         GOTO AGAIN
  466.         ENDIF
  467.     ELSE
  468.         i% = ExitExecRestart
  469.         i% = DoMsgBox("Please close down and restart Windows.", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  470.     ENDIF
  471.     ENDIF
  472.   
  473.  
  474.     END
  475.  
  476. ERRQUIT:
  477.     i% = DoMsgBox(szBadDisks$, szTitle$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  478.     END
  479.  
  480.  
  481. '---------------------------------------------------------------------------
  482. ' ASKQUIT:  Ensure the user really wants to quit
  483. '---------------------------------------------------------------------------
  484. ASKQUIT:
  485. '$IFDEF DEMO
  486.     sz$ = UIStartDlg(CUIDLL$, ASKQUITDEMO, "FQuitDlgProc", 0, "")
  487. '$ELSE
  488.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  489. '$ENDIF
  490.  
  491.     IF sz$ = "EXIT" THEN
  492.     UIPopAll
  493.     ERROR STFQUIT
  494.     ELSEIF sz$ = "REACTIVATE" THEN
  495.     GOTO ASKQUIT
  496.     ELSE
  497.     UIPop 1
  498.     END IF
  499.     RETURN
  500.  
  501.  
  502. '*************************************************************************
  503. '                    S  U  B  R  O  U  T  I  N  E  S
  504. '*************************************************************************
  505.  
  506. '****************************************************************************
  507. ' FUNCTION         : BadPath
  508. '
  509. ' DESCRIPTION      : Display BADDIR dialog
  510. '
  511. ' NOTES            : Arguments none.
  512. '                    Returns none.
  513. '
  514. ' INIT  DATE         LOG (Newest first)
  515. ' ---------------------------------------------------------------------------
  516. ' SVBR  92.12.15     Initial version created
  517. '****************************************************************************/
  518. SUB BadPath STATIC
  519.  
  520. BADDIR1:
  521. '$IFDEF DEMO
  522.     sz$ = UIStartDlg(CUIDLL$, BADDIRDEMO, "FInfo0DlgProc", 0, "")
  523. '$ELSE
  524.     sz$ = UIStartDlg(CUIDLL$, BADDIR, "FInfo0DlgProc", 0, "")
  525. '$ENDIF
  526.     IF sz$ = "REACTIVATE" THEN
  527.     GOTO BADDIR1
  528.     END IF
  529.     UIPop 1
  530. END SUB ''End of BadPath
  531.  
  532. '*************************************************************************
  533. '** Routine: CalcPathSpace
  534. '** Purpose:
  535. '**     Determine free space on path drive.
  536. '** Arguments:
  537. '**     szDir
  538. '** Returns:
  539. '**     cbDrive
  540. '**     szDrive
  541. '*************************************************************************
  542. SUB CalcPathSpace STATIC
  543.     szDrive$ = Mid$(szDir$, 1, 1)
  544.     cbDrive& = GetFreeSpaceForDrive(Mid$(szDrive$,1, 1))
  545.     cbDrive& = (cbDrive& + 1023) / 1024
  546.     cbWinDrive& = GetFreeSpaceForDrive(Mid$(szWinDrive$,1, 1))
  547.     cbWinDrive& = (cbWinDrive& + 1023) / 1024
  548. END SUB
  549.  
  550. '*************************************************************************
  551. '** Routine: CheckTempSpace
  552. '** Purpose:
  553. '**     Check free space on temp-directory.
  554. '** Arguments:
  555. '**     none
  556. '** Returns:
  557. '**     none
  558. '*************************************************************************
  559. SUB CheckTempSpace STATIC
  560.     szTempDir$ = GetEnvVariableValue ("TEMP")
  561.     IF szTempDir$ = "" THEN
  562.     szTempDir$ = GetWindowsDir()
  563.     ENDIF
  564.     cbFree& = GetFreeSpaceForDrive(Mid$(szTempDir$,1, 1))
  565.     cbFree& = (cbFree& + 1023) / 1024
  566.     IF cbFree& < MinTempSpace% THEN
  567.     i% = DoMsgBox("It is recomended to use a TEMP-directory whith at least 3 MB free space. You have only " + Ltrim$(Str$(cbFree&)) + szKB$ + "!", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  568.     ENDIF
  569. END SUB
  570.  
  571. '*************************************************************************
  572. '** Routine: CheckATM
  573. '** Purpose:
  574. '**     Determinate if the user has selected ATM
  575. '** Arguments:
  576. '**     none
  577. '** Returns:
  578. '**     none
  579. '*************************************************************************
  580. SUB CheckATM STATIC
  581.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  582.  
  583. AGAIN:
  584.     IF DoesFileExist (ini$, femExists) = fTRUE%  THEN
  585. '$IFDEF DEMO
  586.     sz$ = UIStartDlg(CUIDLL$, ASKATMDEMO, "FInfoDlgProc", 0, "")
  587. '$ELSE
  588.     sz$ = UIStartDlg(CUIDLL$, ASKATM, "FInfoDlgProc", 0, "")
  589. '$ENDIF
  590.     IF sz$ = "CONTINUE" THEN
  591.         UIPop 1
  592.         fATMFiles% = fTRUE%
  593.         IF GetIniKeyString (ini$, "Settings", "ATM") = "Off" THEN
  594.         CreateIniKeyValue ini$, "Settings", "ATM", "On", cmoOverwrite
  595.         ENDIF
  596.     ELSEIF sz$ = "BACK" THEN
  597.         UIPop 1
  598.         fATMFiles% = fFALSE%
  599.     ELSE
  600.         UIPop 1
  601.         GOTO AGAIN
  602.     END IF
  603.  
  604.     ELSE
  605.     fATMFiles% = fFALSE%
  606.     ENDIF
  607. END SUB
  608.  
  609. '*************************************************************************
  610. '** Routine: AskForBWCC
  611. '** Purpose:
  612. '**     
  613. '** Arguments:
  614. '**     none
  615. '** Returns:
  616. '**     none
  617. '*************************************************************************
  618. FUNCTION AskForBWCC STATIC AS INTEGER
  619.  
  620.     i% = DoMsgBox("Ikke implementert BWCC.DLL-sjekk", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  621. BWCCAGAIN:
  622.     sz$ = UIStartDlg(CUIDLL$, BWCCEXISTS, "FInfoDlgProc", BWCCHELP, HELPPROC$)
  623.  
  624.     ''Må fjerne BACK
  625.     IF sz$ = "BACK" THEN
  626.     UIPop 1
  627.     AskForBWCC = -1
  628.     ELSEIF sz$ = "CONTINUE" THEN
  629.     UIPop 1
  630.     AskForBWCC = fTRUE%
  631.     ELSEIF sz$ = "EXIT" THEN
  632.     UIPop 1
  633.     AskForBWCC = fFALSE%
  634.     ELSEIF sz$ = "CANCEL" THEN
  635.     UIPop 1
  636.     AskForBWCC = fFALSE%
  637.     ELSEIF sz$ = "REACTIVATE" THEN
  638.     GOTO BWCCAGAIN
  639.     ELSE
  640.     UIPop 1
  641.     END IF
  642.  
  643. END FUNCTION
  644.  
  645. '*************************************************************************
  646. '** Routine: CreateInstallPath
  647. '** Purpose:
  648. '**     Create destination directories
  649. '** Arguments:
  650. '**     none.
  651. '** Returns:
  652. '**     none.
  653. '*************************************************************************
  654. FUNCTION CreateInstallPath (szDir$) STATIC AS STRING
  655.     sz$ = "CONTINUE"
  656.     IF DoesDirExist(szDir$) <> 1 THEN
  657. CREATEPATH1:
  658. '$IFDEF DEMO
  659.     sz$ = UIStartDlg(CUIDLL$, CREATEPATHDEMO, "FInfo0DlgProc", 0, "")
  660. '$ELSE
  661.     sz$ = UIStartDlg(CUIDLL$, CREATEPATH, "FInfo0DlgProc", 0, "")
  662. '$ENDIF
  663.     IF sz$ = "REACTIVATE" THEN
  664.         GOTO CREATEPATH1
  665.     ELSEIF sz$ = "CONTINUE" THEN
  666.         CreateDir szDir$, cmoVital
  667.     END IF
  668.     UIPop 1
  669.     END IF
  670.     CreateInstallPath = sz$
  671. END FUNCTION
  672.  
  673. '*************************************************************************
  674. '** Routine: DetermineSizes
  675. '** Purpose:
  676. '**     Determine space required for each option.
  677. '** Arguments:
  678. '**     none.
  679. '** Returns:
  680. '**     cbMGWFiles
  681. '**     cbWinFiles
  682. '*************************************************************************
  683. SUB DetermineSizes STATIC
  684.     szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  685.  
  686.     ClearCopyList
  687.     AddSectionFilesToCopyList "BasisFiles", szSrcDir$, szDir$
  688.     AddSectionFilesToCopyList "MctFiles", szSrcDir$, szDir$
  689.     IF szDir$ = szWinDir$ THEN
  690.     AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  691.     IF fATMFiles% = fTRUE% THEN
  692.         ini$ = MakePath(GetWindowsDir, "ATM.INI")
  693.         szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  694.         szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  695.         '' NB! SVBR B¢r sjekke om disse ligger på samme sted som Windows
  696.         AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  697.         AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  698. '           RenameFile MakePath(sz
  699.     ELSE
  700.         AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  701.     ENDIF
  702.     ENDIF
  703.  
  704.     ListSym$ = "MGWNeeds"
  705.     i% = GetCopyListCost ("", ListSym$, "")
  706.     cbMGWFiles& = 0
  707.     FOR i% = 1 TO MaxNoOfDisks% STEP 1
  708.     cbMGWFiles&  = cbMGWFiles& + VAL(GetListItem(ListSym$, i%))
  709.     NEXT i%
  710.     cbMGWFiles& = (cbMGWFiles& + 1023) / 1024
  711.  
  712.     IF szDir$ <> szWinDir$ THEN
  713.     ClearCopyList
  714.     AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, szWinDir$
  715.     IF fATMFiles% = fTRUE% THEN
  716.         ini$ = MakePath(GetWindowsDir, "ATM.INI")
  717.         szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  718.         szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  719.         '' NB! SVBR B¢r sjekke om disse ligger på samme sted som Windows
  720.         AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  721.         AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  722.     ELSE
  723.         AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, szWinDir$
  724.     ENDIF
  725.  
  726.     ListSym$ = "WindowsNeeds"
  727.     i% = GetCopyListCost ("", ListSym$, "")
  728.     cbWinFiles& = 0
  729.     FOR i% = 1 TO MaxNoOfDisks% STEP 1
  730.         cbWinFiles&  = cbWinFiles& + VAL(GetListItem(ListSym$, i%))
  731.     NEXT i%
  732.     cbWinFiles& = (cbWinFiles& + 1023) / 1024
  733.     ELSE
  734.     cbWinFiles& = 0
  735.     ENDIF
  736.  
  737.     ClearCopyList
  738.     ListSym$ = ""
  739. END SUB
  740.  
  741. '*************************************************************************
  742. '** Routine: GetDriveList
  743. '** Purpose:
  744. '**     
  745. '** Arguments:
  746. '**     none.
  747. '** Returns:
  748. '**     
  749. '*************************************************************************
  750. SUB GetDriveList STATIC
  751.     DriveList$ = "DriveList"
  752.     SetSymbolValue DriveList$, ""
  753.     TmpDriveList$ = "TmpDriveList"
  754.     GetValidDrivesList( TmpDriveList$ )
  755.     iMaxDiskNo% = GetListLength (TmpDriveList$)
  756.     RemovableDriveList$ = "RemovableDriveList"
  757.     GetRemovableDrivesList( RemovableDriveList$ )
  758.     iMaxRemovableDiskNo% = GetListLength (RemovableDriveList$)
  759.     FOR iDiskNo% = 1 TO iMaxDiskNo% STEP 1
  760.     fFound% = fFALSE%
  761.     FOR iRemovableDiskNo% = 1 TO iMaxRemovableDiskNo% STEP 1
  762.         IF GetListItem (TmpDriveList$, iDiskNo%) = GetListItem (RemovableDriveList$, iRemovableDiskNo%) THEN
  763.         fFound% = fTRUE%
  764.         EXIT FOR
  765.         ENDIF
  766.     NEXT iRemovableDiskNo%
  767.     IF fFound% <> 1 THEN
  768.         cbDrive& = GetFreeSpaceForDrive (GetListItem (TmpDriveList$, iDiskNo%) )
  769.         cbDrive& = (cbDrive& + 1023) / 1024
  770. '             AddListItem DriveList$, GetListItem (TmpDriveList$, iDiskNo%) + CHR$(9) + Ltrim$(Str$( cbDrive& )) + szKB
  771.         AddListItem DriveList$, GetListItem (TmpDriveList$, iDiskNo%) + "       " + Ltrim$(Str$( cbDrive& )) + szKB
  772.     ENDIF
  773.     NEXT iDiskNo%
  774. '$IFDEF DEBUG
  775.     i% = DoMsgBox("Liste over stasjoner = " + GetSymbolValue(DriveList$), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  776. '$ENDIF ''DEBUG
  777.     RemoveSymbol (TmpDriveList$)
  778.     RemoveSymbol (RemovableDriveList$)
  779. END SUB
  780.  
  781. '*************************************************************************
  782. '** Routine: GetInstallPath
  783. '** Purpose:
  784. '**     Query user for installation path.
  785. '** Arguments:
  786. '**     none.
  787. '** Returns:
  788. '**     szDir$
  789. '*************************************************************************
  790. SUB GetInstallPath STATIC
  791. GETPATH:
  792. '$IFDEF DEBUG
  793.     i% = DoMsgBox("Liste over stasjoner = " + GetSymbolValue(DriveList$), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  794. '$ENDIF ''DEBUG
  795.     SetSymbolValue "ListItemsIn", GetSymbolValue(DriveList$)
  796. '     LOCALHARDDRIVES$ = "LocalHardDrives"
  797. '     GetValidDrivesList( LOCALHARDDRIVES$ )
  798. '     SetSymbolValue "ListItemsIn", GetSymbolValue(LOCALHARDDRIVES$)
  799. '     NB! SVBR
  800. '     SetSymbolValue "ListItemsOut", szDir$
  801.     SetSymbolValue "EditTextIn", szDir$
  802.     SetSymbolValue "EditFocus", "END"
  803. GETPATHL1:
  804.     fError% = fFALSE%
  805. '$IFDEF DEMO
  806.     sz$ = UIStartDlg(CUIDLL$, GETPATHDEMO, "FListEditDlgProc", HELPPATHDEMO, HELPPROC$)
  807. '$ELSE
  808.     sz$ = UIStartDlg(CUIDLL$, GETPATH, "FListEditDlgProc", HELPPATH, HELPPROC$)
  809. '$ENDIF
  810.  
  811.     IF sz$ = "CONTINUE" THEN
  812.     szTDir$ = GetSymbolValue("EditTextOut")
  813.     szTDir$ = Ltrim$(szTDir$)
  814.     szTDir$ = Rtrim$(szTDir$)
  815.  
  816.     IF InStr(1, szTDir$, ":") = fFALSE% THEN
  817.         szTDir$ = Mid$(GetSymbolValue("STF_CWDDIR"), 1, 1) + ":" + szTDir$
  818.     END IF
  819.  
  820.     IF MID$(szTDir$, LEN(szTDir$), 1) = "\" THEN
  821.         fError% = fTRUE%
  822.     END IF
  823.  
  824.     '' NB! SVBR IsDirWriteable does not work propably
  825. '         IF fError% <> fTRUE% AND IsDirWritable(szTDir$) = fFALSE% THEN
  826.     IF fError% <> fTRUE% AND IsDriveValid( MID$(szTDir$, 1, 1) ) = fFALSE% THEN
  827.         fError% = fTRUE%
  828.     END IF
  829.     IF fError% <> fTRUE% AND IsDriveRemovable(szTDir$) <> 0 THEN
  830.         fError% = fTRUE%
  831.     END IF
  832.  
  833.     IF fError% <> fTRUE% AND Exists(szTDir$) THEN
  834.         fError% = fTRUE%
  835.     END IF
  836.  
  837.     IF fError% <> fTRUE% THEN
  838.         i% = 0
  839. GETPATHL2:
  840.         iLastDir% = i%
  841.         i% = INSTR(iLastDir%+1, szTDir$, "\")
  842.         IF i% <> 0 THEN
  843.         GOTO GETPATHL2
  844.         END IF
  845.         IF MID$(szTDir$, iLastDir%, 1) = "\" THEN
  846.         iLastDir% = iLastDir% + 1
  847.         END IF
  848.  
  849.         szLastDir$ = UCASE$(MID$(szTDir$, iLastDir%))
  850.  
  851.         IF szLastDir$ = "PRN" OR szLastDir$ = "AUX" OR szLastDir$ = "CON" THEN
  852.         fError% = fTRUE%
  853.         END IF
  854.  
  855.         IF LEN(szLastDir$) = 4 THEN
  856.         iNum = VAL(MID$(szLastDir$, 4, 1))
  857.         IF iNum >= 1 AND iNum <= 9 THEN
  858.             IF MID$(szLastDir$, 1, 3) = "COM" OR MID$(szLastDir$, 1, 3) = "LPT" THEN
  859.             fError% = fTRUE%
  860.             END IF
  861.         END IF
  862.         END IF
  863.     END IF
  864.  
  865.     IF fError% = fTRUE% THEN
  866.         BadPath
  867.         GOTO GETPATHL1
  868.     END IF
  869.  
  870.     sz$ = CreateInstallPath(szTDir$)
  871.     IF sz$ <> "CONTINUE" THEN
  872.         GOTO GETPATHL1
  873.     END IF
  874.  
  875. '$IFDEF DEMO
  876.     sz$ = UIStartDlg(CUIDLL$, WAITSIZEDEMO, "FModelessDlgProc", 0, "")
  877. '$ELSE
  878.     sz$ = UIStartDlg(CUIDLL$, WAITSIZE, "FModelessDlgProc", 0, "")
  879. '$ENDIF
  880.     szDir$ = szTDir$
  881.     DetermineSizes
  882.     CalcPathSpace
  883.     UIPop 1
  884.  
  885.     END IF
  886.     UIPop 1
  887. END SUB
  888.  
  889. '*************************************************************************
  890. '** Routine: Install
  891. '** Purpose:
  892. '**     Builds the copy list and performs all installation operations.
  893. '** Arguments:
  894. '**     none.
  895. '** Returns:
  896. '**     none.
  897. '*************************************************************************
  898. SUB Install STATIC
  899.     '' Do not check the size of files on diskett
  900. '    i% = SetSizeCheckMode (scmOnIgnore)
  901.  
  902.     CreateDir szDir$, cmoVital
  903.     AddSectionFilesToCopyList "BasisFiles", szSrcDir$, szDir$
  904.     AddSectionFilesToCopyList "MctFiles", szSrcDir$, szDir$
  905.     IF DoesFileExist ( Makepath (szWinDir$, "SYSTEM\BWCC.DLL"), femExists) = fTRUE% THEN
  906. '         IF GetDateOfFile ( Makepath (szWinDir$, "SYSTEM\BWCC.DLL") ) = GetSectionKeyDate ("BWCCdllFiles", "Borland Custom Control") THEN
  907. '             AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  908. '         ELSE
  909. '             InstBWCC% = AskForBWCC()
  910. '             IF InstBWCC%= 1 THEN
  911. '                 AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  912. '             ELSEIF InstBWCC%= -1 THEN
  913. '                 ' Back
  914. '             ENDIF
  915. '         ENDIF
  916.     ELSE
  917.     AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  918.     ENDIF
  919.     IF fATMFiles% = fTRUE% THEN
  920.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  921.     szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  922.     AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  923.     szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  924.     AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  925.     ELSE
  926.     AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  927.     ENDIF
  928.     SetRestartDir szWinDir$
  929.     CopyFilesInCopyList
  930.  
  931.     IF fATMFiles% = fTRUE% THEN
  932.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  933.     CreateIniKeyValue ini$, "Fonts", "Musicator", MakePath( szPSpfmFontsPath$, "mu______.pfm") + "," + MakePath( szPSpfbFontsPath$, "mu______.pfb"), cmoOverwrite
  934.     ELSE
  935.     ini$ = MakePath(GetWindowsDir, "WIN.INI")
  936.     CreateIniKeyValue ini$, "fonts", "Musicator (TrueType)", "MUSICA2.FOT", cmoOverwrite
  937.     ENDIF
  938.  
  939.     CreateProgmanGroup szGroupName$, "", cmoNone
  940.     CreateProgmanItem szGroupName$, "Readme", "Write.exe " + MakePath (szDir$, "README.WRI"), "", cmoOverwrite
  941.     CreateProgmanItem szGroupName$, szProgramName$, MakePath (szDir$, "winmusgs.exe"), "", cmoOverwrite
  942.  
  943. END SUB
  944.  
  945. '*************************************************************************
  946. '** Routine: InsufficientSpace
  947. '** Purpose:
  948. '**     Display TOOBIG dialog
  949. '** Arguments:
  950. '**     none.
  951. '** Returns:
  952. '**     none.
  953. '*************************************************************************
  954. SUB InsufficientSpace STATIC
  955. BADDIR1:
  956. '$IFDEF DEMO
  957.     sz$ = UIStartDlg(CUIDLL$, TOOBIGDEMO, "FInfo0DlgProc", 0, "")
  958. '$ELSE
  959.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  960. '$ENDIF
  961.     IF sz$ = "REACTIVATE" THEN
  962.     GOTO BADDIR1
  963.     END IF
  964.     UIPop 1
  965. END SUB
  966.  
  967.  
  968. '*************************************************************************
  969. '** Routine: MakePath
  970. '** Purpose:
  971. '**     Appends a file name to the end of a directory path,
  972. '**     inserting a backslash character as needed.
  973. '** Arguments:
  974. '**     szDir$  - full directory path (with optional ending "\")
  975. '**     szFile$ - filename to append to directory
  976. '** Returns:
  977. '**     Resulting fully qualified path name.
  978. '*************************************************************************
  979. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  980.     IF szDir$ = "" THEN
  981.     MakePath = szFile$
  982.     ELSEIF szFile$ = "" THEN
  983.     MakePath = szDir$
  984.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  985.     MakePath = szDir$ + szFile$
  986.     ELSE
  987.     MakePath = szDir$ + "\" + szFile$
  988.     END IF
  989. END FUNCTION
  990.  
  991.